/*
 * The contents of this file are subject to the Mozilla Public License
 * Version 1.1 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
 * License for the specific language governing rights and limitations
 * under the License.
 * 
 * The Original Code is iSQL-Viewer, A Mutli-Platform Database Tool.
 *
 * The Initial Developer of the Original Code is iSQL-Viewer, A Mutli-Platform Database Tool.
 * Portions created by Mark A. Kobold are Copyright (C) 2000-2007. All Rights Reserved.
 *
 * Contributor(s): 
 *  Mark A. Kobold [mkobold <at> isqlviewer <dot> com].
 *  
 * If you didn't download this code from the following link, you should check
 * if you aren't using an obsolete version: http://www.isqlviewer.com
 */
package org.isqlviewer.ui.laf;

import java.awt.Color;
import java.awt.Component;

import javax.swing.JCheckBox;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import javax.swing.plaf.UIResource;
import javax.swing.table.TableCellRenderer;

/**
 * Standard boolean value renderer in the form of a JCheckbox.
 * <p>
 * 
 * @author Mark A. Kobold &lt;mkobold at isqlviewer dot com&gt;
 * @version 1.0
 */
public class EnhancedBooleanCellRenderer extends JCheckBox implements TableCellRenderer, UIResource {

    private static final long serialVersionUID = 8090643672945427653L;
    private static final Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);

    public EnhancedBooleanCellRenderer() {

        super();
        setHorizontalAlignment(SwingConstants.CENTER);
        setBorderPainted(true);
    }

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
            int row, int column) {

        if (isSelected) {
            if (table.hasFocus()) {
                setBackground(EnhancedTableCellRenderer.selectedFocusedColor);
                setForeground(Color.WHITE);
            } else {
                setBackground(EnhancedTableCellRenderer.selectedNotFocusedColor);
                setForeground(Color.BLACK);
            }
        } else {
            Color color = row % 2 == 0 ? EnhancedTableCellRenderer.evenRowColor : EnhancedTableCellRenderer.oddRowColor;
            setBackground(color);
            setForeground(Color.BLACK);
        }

        setSelected((value != null && ((Boolean) value).booleanValue()));
        if (hasFocus) {
            setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
        } else {
            setBorder(noFocusBorder);
        }
        return this;
    }
}
